home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 4: GNU Archives / Linux Cubed Series 4 - GNU Archives.iso / gnu / binutils.7 / binutils / binutils-2.7 / gas / config / tc-sparc.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-07-04  |  4.1 KB  |  128 lines

  1. /* tc-sparc.h - Macros and type defines for the sparc.
  2.    Copyright (C) 1989, 90-95, 1996 Free Software Foundation, Inc.
  3.  
  4.    This file is part of GAS, the GNU Assembler.
  5.  
  6.    GAS is free software; you can redistribute it and/or modify
  7.    it under the terms of the GNU General Public License as
  8.    published by the Free Software Foundation; either version 2,
  9.    or (at your option) any later version.
  10.  
  11.    GAS is distributed in the hope that it will be useful, but
  12.    WITHOUT ANY WARRANTY; without even the implied warranty of
  13.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
  14.    the GNU General Public License for more details.
  15.  
  16.    You should have received a copy of the GNU General Public
  17.    License along with GAS; see the file COPYING.  If not, write
  18.    to the Free Software Foundation, 59 Temple Place - Suite 330,
  19.    Boston, MA 02111-1307, USA.  */
  20.  
  21. #define TC_SPARC 1
  22.  
  23. #define LOCAL_LABELS_FB 1
  24.  
  25. #define TARGET_ARCH bfd_arch_sparc
  26. #ifdef OBJ_AOUT
  27. #ifdef TE_NetBSD
  28. #define TARGET_FORMAT "a.out-sparc-netbsd"
  29. #else
  30. #define TARGET_FORMAT "a.out-sunos-big"
  31. #endif
  32. #endif
  33. #ifdef OBJ_BOUT
  34. #define TARGET_FORMAT "b.out.big"
  35. #endif
  36. #ifdef OBJ_ELF
  37. #ifdef SPARC_ARCH64
  38. #define TARGET_FORMAT "elf64-sparc"
  39. #else
  40. #define TARGET_FORMAT "elf32-sparc"
  41. #endif
  42. #define LOCAL_LABEL(name)    (((name)[0] == '.' && (name)[1] == 'L') || !strncmp ((name), "_.L_", 4))
  43. #endif
  44. #define WORKING_DOT_WORD
  45.  
  46. #define md_convert_frag(b,s,f)        {as_fatal ("sparc convert_frag\n");}
  47. #define md_create_long_jump(p,f,t,fr,s)    as_fatal("sparc_create_long_jump")
  48. #define md_create_short_jump(p,f,t,fr,s) as_fatal("sparc_create_short_jump")
  49. #define md_estimate_size_before_relax(f,s) \
  50.             (as_fatal("estimate_size_before_relax called"),1)
  51. void tc_aout_pre_write_hook ();
  52.  
  53. #define LISTING_HEADER "SPARC GAS "
  54.  
  55. extern int sparc_pic_code;
  56.  
  57. /* We require .word, et. al., to be aligned correctly.  */
  58. #define md_cons_align(nbytes) sparc_cons_align (nbytes)
  59. extern void sparc_cons_align PARAMS ((int));
  60. #define HANDLE_ALIGN(fragp) sparc_handle_align (fragp)
  61. extern void sparc_handle_align ();
  62.  
  63. #if defined (OBJ_ELF) || defined (OBJ_AOUT)
  64.  
  65. /* This expression evaluates to false if the relocation is for a local
  66.    object for which we still want to do the relocation at runtime.
  67.    True if we are willing to perform this relocation while building
  68.    the .o file.
  69.  
  70.    If the reloc is against an externally visible symbol, then the
  71.    a.out assembler should not do the relocation if generating PIC, and
  72.    the ELF assembler should never do the relocation.  */
  73.  
  74. #ifdef OBJ_ELF
  75. #define obj_relocate_extern 0
  76. #else
  77. #define obj_relocate_extern (! sparc_pic_code)
  78. #endif
  79.  
  80. #define TC_RELOC_RTSYM_LOC_FIXUP(FIX)  \
  81.   (obj_relocate_extern \
  82.    || (FIX)->fx_addsy == NULL \
  83.    || (! S_IS_EXTERNAL ((FIX)->fx_addsy) \
  84.        && ! S_IS_WEAK ((FIX)->fx_addsy) \
  85.        && S_IS_DEFINED ((FIX)->fx_addsy) \
  86.        && ! S_IS_COMMON ((FIX)->fx_addsy)))
  87. #endif
  88.  
  89. /* I know that "call 0" fails in sparc-coff if this doesn't return 1.  I
  90.    don't know about other relocation types, or other formats, yet.  */
  91. #ifdef OBJ_COFF
  92. #define TC_FORCE_RELOCATION(FIXP)    \
  93.     ((FIXP)->fx_r_type == BFD_RELOC_32_PCREL_S2 \
  94.      && ((FIXP)->fx_addsy == 0 \
  95.          || S_GET_SEGMENT ((FIXP)->fx_addsy) == absolute_section))
  96. #define RELOC_REQUIRES_SYMBOL
  97. #endif
  98.  
  99. #define TC_HANDLES_FX_DONE
  100.  
  101. #ifdef OBJ_ELF
  102. /* Keep relocations against global symbols.  Don't turn them into
  103.    relocations against sections.  This is required for the dynamic
  104.    linker to operate properly.  When generating PIC, we need to keep
  105.    any non PC relative reloc.  */
  106. #define tc_fix_adjustable(FIX) \
  107.   (! S_IS_EXTERNAL ((FIX)->fx_addsy) \
  108.    && ! S_IS_WEAK ((FIX)->fx_addsy) \
  109.    && (! sparc_pic_code || (FIX)->fx_pcrel))
  110. #endif
  111.  
  112. #ifdef OBJ_AOUT
  113. /* When generating PIC code, we must not adjust any reloc which will
  114.    turn into a reloc against the global offset table.  */
  115. #define tc_fix_adjustable(FIX) \
  116.   (! sparc_pic_code \
  117.    || (FIX)->fx_pcrel \
  118.    || (FIX)->fx_r_type == BFD_RELOC_16 \
  119.    || (FIX)->fx_r_type == BFD_RELOC_32)
  120. #endif
  121.  
  122. #define md_operand(x)
  123.  
  124. extern void sparc_md_end PARAMS ((void));
  125. #define md_end() sparc_md_end ()
  126.  
  127. /* end of tc-sparc.h */
  128.